/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Entities;

import JDBC.ConnectionPool;
import JDBC.ConnectionPoolException;
import JDBC.Operazioni;
import Logger.MyLogger;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.ResultSet;
import java.io.IOException;
import java.sql.Date;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author marcy
 */
public class Paziente extends User {

    private ConnectionPool pool;
    private Connection conn;
    private ResultSet res;
    private Integer Id;
    private String Nome;
    private String Cognome;
    private String Username;
    private String Password;
    private String Foto;
    private Date Data_nascita;
    private boolean Registrato;

    public Paziente(int id, String nome, String cognome, String username, String password, String foto, Date data_nascita, int gruppo) {
        MyLogger.getLogger().debug("Costruttore Paziente");
        this.Id = id;
        this.Nome = nome;
        this.Cognome = cognome;
        this.Username = username;
        this.Password = password;
        this.Foto = foto;
        this.Data_nascita = data_nascita;
        this.gruppo = 2;
    }


    public boolean isRegistrato() {
        return Registrato;
    }

    public void setRegistrato(boolean Registrato) {
        this.Registrato = Registrato;
    }

   


    public String getCognome() {
        return Cognome;
    }

    public Date getData_nascita() {
        return Data_nascita;
    }

    public String getFoto() {
        return Foto;
    }

    public Integer getId() {
        return Id;
    }

    public String getNome() {
        return Nome;
    }

    public String getPassword() {
        return Password;
    }

    public String getUsername() {
        return Username;
    }
    //Restituisce il paziente da un dato id

    public Paziente(int id) {
        Paziente paz = null;

        try {
            pool = ConnectionPool.getConnetionPool();
            conn = pool.getConnection();
        } catch (ConnectionPoolException ex) {
            Logger.getLogger(Paziente.class.getName()).log(Level.SEVERE, null, ex);
        }
        res = Operazioni.execute_query("SELECT * "
                + "FROM Paziente "
                + "WHERE Id = " + id + "",
                conn);
        pool.relaseConnection(conn);
        conn = null;
        pool = null;
        System.gc();
        try {
            while (res.next()) {
                this.Id = id;
                this.Nome = res.getString("Nome");
                this.Cognome = res.getString("Cognome");
                this.Foto = res.getString("Foto");
                this.Data_nascita = res.getDate("Data_nascita");
            }
            res.close();
        } catch (SQLException ex) {
            Logger.getLogger(Paziente.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    public Paziente() {
        this.gruppo = 2;
    }

    public boolean isAlreadyRegistered(String nome, String cognome, HttpServletResponse response,
            HttpServletRequest request) throws SQLException {
        try {
            pool = ConnectionPool.getConnetionPool();
            conn = pool.getConnection();
        } catch (ConnectionPoolException ex) {
            Logger.getLogger(Paziente.class.getName()).log(Level.SEVERE, null, ex);
        }
        res = Operazioni.execute_query("SELECT * FROM "
                + "Paziente P "
                + "WHERE P.Nome = '" + nome + "' "
                + "AND P.Cognome = '" + cognome + "' ", conn);

        pool.relaseConnection(conn);
        conn = null;
        pool = null;
        System.gc();
        boolean empty = res.next();
        if(res.getInt("Registrato")== 1)
            return true;
        res.close();
        
        return empty;

    }

    public void UpdatePaziente(String username, String password, String nome, String cognome) {
        try {
            pool = ConnectionPool.getConnetionPool();
            conn = pool.getConnection();
        } catch (ConnectionPoolException ex) {
            Logger.getLogger(Paziente.class.getName()).log(Level.SEVERE, null, ex);
        }
        Operazioni.execute_statement("UPDATE  Paziente "
                + " SET  Username = '" + username + "', "
                + " Password = '" + password + "', "
                + " Registrato =  1 "
                + " WHERE  Nome ='" + nome + "' "
                + " AND Cognome = '" + cognome + "'", conn);

        pool.relaseConnection(conn);
        conn = null;
        pool = null;
        System.gc();

    }
}
